package com.jt.config;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisSentinelPool;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;

//redis配置类，相当于xml <bean id="jedis" class="redis.clients.jedis.Jedis"/>
@Configuration
@PropertySource("classpath:/properties/redis.properties")//通过加载配置文件为属性赋值
public class RedisConfig {
	//spring整合redis单片
//	@Value("${redis.host}")
//	private String host;//主机
//	@Value("${redis.port}")
//	private Integer port;//端口号
//	
//	@Bean//交给spring管理，相当于xml文件中bean标签
//	public Jedis jedis() {
//		return new Jedis(host,port);
//	}
	
	//spring整合redis分片
//	@Value("${redis.nodes}")
//	private String nodes;
//	
//	@Bean
//	public ShardedJedis shardedJedis() {
//		List<JedisShardInfo> shards=getShards();
//		return new ShardedJedis(shards);
//	}
//
//	private List<JedisShardInfo> getShards() {
//		List<JedisShardInfo> list=new ArrayList<>();
//		String[] nodeArray=nodes.split(",");
//		for (String node : nodeArray) {//node host:port
//			String host=node.split(":")[0];
//			int port=Integer.parseInt(node.split(":")[1]);
//			JedisShardInfo info=new JedisShardInfo(host, port);
//			list.add(info);
//		}
//		return list;
//	}
	
	//spring整合哨兵
//	@Value("${redis.masterName}")
//	private String masterName;
//	@Value("${redis.nodes}")
//	private String nodes;
//	
//	@Bean("jedisSentinelPool")
//	public JedisSentinelPool jedisSentinelPool() {
//		Set<String> sentinels=new HashSet<>();
//		sentinels.add(nodes);
//		return new JedisSentinelPool(masterName, sentinels);
//	}
//	
//	@Bean
//	public Jedis jedis(@Qualifier("jedisSentinelPool")JedisSentinelPool pool) {
//		return pool.getResource();
//	}
	
	//spring整合redis集群
	@Value("${redis.nodes}")
	private String nodes;
	
	@Bean
	public JedisCluster jedisCluster() {
		Set<HostAndPort> nodeSet=new HashSet<>();
		String[] nodeArray=nodes.split(",");
		for (String node : nodeArray) {
			String host=node.split(":")[0];
			int port=Integer.parseInt(node.split(":")[1]);
			nodeSet.add(new HostAndPort(host, port));
		}
		return new JedisCluster(nodeSet);
	}
}
